package com.creative.xcx.service;

import com.creative.core.domain.AjaxResult;
import com.creative.core.page.TableDataInfo;
import com.creative.xcx.domain.Material;
import com.creative.xcx.domain.vo.MaterialVo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author ling
 * @description 素材信息
 * @date 2025-03-02
 */
@Transactional(rollbackFor = Exception.class)
public interface MaterialService {

    /**
     * 新增
     */
    public Integer insert(Material material);

    /**
     * 删除
     */
    public Integer delete(String materialId);

    /**
     * 批量删除
     */

    public Integer deleteBatch(String[] ids);


    /**
     * 更新
     */
    public Integer update(Material material);

    /**
     * 根据主键 id 查询
     */
    public Material selectById(String materialId);

    public MaterialVo selectAppById(String materialId);

    /**
     * 分页查询
     */
    public TableDataInfo selectMaterialList(Material material);

    /**
     * 获取随机素材
     *
     * @param Suffix 后缀
     * @param key    键
     * @return {@link List }<{@link MaterialVo }>
     * @author ling
     * @date 2025/04/28
     */
    List<MaterialVo> getRandomMaterialList(String[] Suffix, String key);

    /**
     * 批量导出
     *
     * @author ling
     * @date 2025/03/02
     **/
    public List<Material> exportBatch(String[] ids);

    /**
     * 素材的关键词（标签查找）
     *
     * @param keyword 关键词
     * @return {@link AjaxResult }
     * @author ling
     * @date 2025/04/09
     */
    List<Material> getMaterialKeyword(String keyword);

    /**
     * 按关键字搜索材料
     *
     * @param material 素材
     * @return {@link TableDataInfo }
     * @author ling
     * @date 2025/04/09
     */
    TableDataInfo searchMaterialByKeyword(Material material);

    /**
     * 素材上传页的素材推荐
     *
     * @return {@link List }<{@link Material }>
     * @author ling
     * @date 2025/04/12
     */
    List<MaterialVo> getMpMaterialRecommend();

    /**
     * 统计素材数量
     *
     * @return {@link Long }
     * @author ling
     * @date 2025/04/28
     */
    Long calculateMaterial();

    /**
     * 收藏素材
     *
     * @param material 素材实体
     * @return {@link Integer }
     * @author ling
     * @date 2025/03/26
     */
    public Integer collectMaterial(Material material);

    /**
     * 取消收藏
     *
     * @param material 素材实体
     * @return {@link Integer }
     * @author ling
     * @date 2025/03/26
     */
    public Integer unCollectMaterial(Material material);


}
